package com.mazaiting.rtda;

import com.mazaiting.rtda.heap.MtMethod;
import lombok.Getter;
import lombok.Setter;

/**
 * 帧
 *
 * @author mazaiting
 * @since 2021/8/13
 */
@Setter
@Getter
public class MtFrame {
    /**
     * 上一帧的引用
     * 实现链表数据结构
     */
    public MtFrame lower;
    /**
     * 局部变量表
     * 保存局部变量表指针
     */
    private MtLocalVars localVars;
    /**
     * 操作数栈
     * 保存操作数栈指针
     */
    private MtOperandStack operandStack;
    /**
     * 线程
     */
    private MtThread thread;
    /**
     * 下一个计数器
     */
    private int nextPc;
    /**
     * 方法
     */
    private MtMethod method;

    /**
     * 执行方法所需的局部变量表大小和操作数栈深度是由编译器 预先计算好的，存储在class文件method_info结构的Code属性
     *
     */
    public MtFrame(MtThread thread, MtMethod method) {
        this.thread = thread;
        this.method = method;
        this.localVars = new MtLocalVars(method.getMaxLocals());
        this.operandStack = new MtOperandStack(method.getMaxStack());
    }


}


















